package dk.muldbjergskolen.db;

import java.sql.*;
import java.util.ArrayList;

import dk.muldbjergskolen.db.PersonDB.UGyldigtPostNr;
import dk.muldbjergskolen.model.*;

public class AnsatDB {
	private ConnectionDB con;

	public AnsatDB() {
		con = ConnectionDB.getInstance();
	}

	public void opretAnsat(Ansat a) throws UGyldigtPostNr {
		// Insæt personen.
		PersonDB pDB = new PersonDB();
		pDB.opretPerson(a);
		// Få fat i den nyoprettede persons id.
		int personId = ConnectionDB.getInstance().getMaxId("Person");

		String query = "insert into Ansat values ('" + personId + "','"
				+ a.getStilling() + "', '" + a.getBrugernavn() + "', '"
				+ a.getAdgangskode() + "')";

		try {
			con.execQuery(query);
		} catch (SQLException e) {
			System.out.println(e.getMessage());
		}
	}

	public Ansat getAnsat(String brugernavn, String adgangskode) {
		Ansat ansat = null;

		String query = "SELECT personId, stilling, brugernavn, adgangskode FROM Ansat"
				+ " WHERE brugernavn='"
				+ brugernavn
				+ "' AND adgangskode='"
				+ adgangskode + "'";

		try {
			ResultSet rs = con.getResultSet(query);

			if (rs.next()) {
				ansat = buildAnsat(rs);
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}

		return ansat;
	}

	/**
	 * Opretter en ansat ud fra person id.
	 * 
	 * @param personId
	 *            på ansatten.
	 * @return en ansat.
	 */
	public Ansat getAnsat(int personId) {
		Ansat ansat = null;

		String query = "SELECT personId, stilling, brugernavn, adgangskode FROM Ansat WHERE personId = "
				+ personId;

		try {
			ResultSet rs = con.getResultSet(query);

			if (rs.next()) {
				ansat = buildAnsat(rs);
			}
		} catch (SQLException e) {
			System.out.println(e.getMessage());
		}

		return ansat;
	}

	private Ansat buildAnsat(ResultSet resultSet) throws SQLException {
		// Lav først en person.
		PersonDB pDB = new PersonDB();
		Person p = pDB.getPerson(resultSet.getInt("personId"));
		// Udvid person til en ansat.
		Ansat ansat = new Ansat(p, resultSet.getString("stilling"),
				resultSet.getString("brugernavn"),
				resultSet.getString("adgangskode"));

		return ansat;
	}

	// Finder alle ansatte og returnere dem i en ArrayListe
	public ArrayList<Ansat> findAnsatte() {
		ArrayList<Ansat> aa = new ArrayList<Ansat>();
		String query = "select personId, stilling, brugernavn, adgangskode from Ansat";
		Ansat a = null;

		try {
			ResultSet rs = con.getResultSet(query);

			while (rs.next()) {
				a = buildAnsat(rs);
				aa.add(a);
			}
			rs.close();
		} catch (SQLException e) {
			e.printStackTrace();
		}

		return aa;
	}

	// updater ansat i administration
	public void retAnsat(Ansat a, int glId) throws UGyldigtPostNr {
		// Ret først persondelen af ansatten.
		PersonDB pDB = new PersonDB();
		pDB.retPerson(glId, a);

		String query = "UPDATE Ansat SET stilling ='" + a.getStilling()
				+ "' ,brugernavn ='" + a.getBrugernavn() + "' ,adgangskode ='"
				+ a.getAdgangskode() + "'where personId ='" + glId + "'";

		try {
			con.execQuery(query);
		} catch (Exception e) {
			System.out.println("Update exception in Ansat db: " + e);
		}
	}
}
